package com.wmlive.hhvideo.heihei.db.manager;

import android.content.Context;

import com.wmlive.hhvideo.heihei.db.datatable.IMMessageDefaultTable;
import com.wmlive.hhvideo.heihei.db.datatable.IMMessageDefaultTableDao;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.ArrayList;
import java.util.List;

/**
 * IM 消息中默认数据库信息管理
 * Created by kangzhen on 2017/7/7.
 */

public class IMMessageDefaultDBManager {

    private Context mContext;
    private static IMMessageDefaultDBManager mInstance;

    private IMMessageDefaultTableDao imMessageDefaultTableDao;

    private IMMessageDefaultDBManager(Context context)
    {

        mContext = context;
    }

    public static IMMessageDefaultDBManager getInstance(Context context) {
        if (mInstance == null || mInstance.imMessageDefaultTableDao==null) {
            synchronized (IMMessageDefaultDBManager.class) {
                if(mInstance==null || mInstance.imMessageDefaultTableDao==null){
                    mInstance = new IMMessageDefaultDBManager(context);
                    mInstance.imMessageDefaultTableDao = new GreenDaoDefaultDBManager(context).getIMMessageDefaultTableDao();
                }
            }
        }
        return mInstance;
    }

    /**
     * 统计数据表中的数量
     * @return
     */
    public synchronized long getIMMessageAllCount(){
        QueryBuilder<IMMessageDefaultTable> qb = imMessageDefaultTableDao.queryBuilder();
        return qb.buildCount().count();
    }

    /**
     * 获取未消息数量
     * @return
     */
    public synchronized long getImDefaultEntryUnReadCount(){
        QueryBuilder qb =imMessageDefaultTableDao.queryBuilder();
        qb.where(IMMessageDefaultTableDao.Properties.IsRead.eq(0));
        return qb.buildCount().count();
    }
    //==============================add ========================

    /**
     * 添加
     * @param entry
     * @return
     */
    public synchronized long insertIMDefaultData(IMMessageDefaultTable entry){
        if(entry==null){
            return -1;
        }
        return imMessageDefaultTableDao.insert(entry);
    }

    /**
     * 保存
     * @param entry
     * @return
     */
    public synchronized long saveIMDefaultData(IMMessageDefaultTable entry){
        if(entry==null){
            return -1;
        }
        return imMessageDefaultTableDao.insertOrReplace(entry);
    }

    /**
     * 批量保存数据
     * @param datas
     * @return
     */
    public synchronized long saveIMDefaultDateByIte(Iterable<IMMessageDefaultTable> datas){
        if(datas==null){
            return -1;
        }
        imMessageDefaultTableDao.insertOrReplaceInTx(datas);
        return 1;
    }
    //==============================update ========================

    /**
     * 更新单个实例
     * @param entry
     */
    public synchronized void updateIMDefaultDataByEntry(IMMessageDefaultTable entry){
        if(entry==null){
            return ;
        }
        imMessageDefaultTableDao.update(entry);
    }
    //==============================select ========================


    /**
     * 获取最新的数据集合(倒序)
     * @param pageSize
     * @return
     */
    public synchronized List<IMMessageDefaultTable> getImDefaultEntryListDesc(int pageSize){
        if(pageSize<=0){
            pageSize = 5;
        }
        List<IMMessageDefaultTable > dataList = null ;
        try {
           QueryBuilder qb =imMessageDefaultTableDao.queryBuilder();
            qb.orderDesc(IMMessageDefaultTableDao.Properties.Listid);
            qb.limit(pageSize);
            dataList = qb.list();
        }catch (Exception e){

        }
        return dataList;
    }
    /**
     * 获取最新的数据集合(正序)
     * @param pageSize
     * @return
     */
    public synchronized List<IMMessageDefaultTable> getImDefaultEntryListAsc(int pageSize){
        if(pageSize<=0){
            pageSize = 5;
        }
        List<IMMessageDefaultTable > dataList = null ;
        try {
            QueryBuilder qb =imMessageDefaultTableDao.queryBuilder();
            qb.orderAsc(IMMessageDefaultTableDao.Properties.Listid);
            qb.limit(pageSize);
            dataList = qb.list();
        }catch (Exception e){

        }
        return dataList;
    }
    /**
     * 分页获取数据（倒序）
     * @param listId  开始listid（小于）
     * @param pageSize
     * @return
     */
    public synchronized List<IMMessageDefaultTable> getImDefaultEntryListByListIdDesc(long listId, int pageSize){
        if(pageSize<=0){
            pageSize = 5;
        }
        List<IMMessageDefaultTable > dataList = new ArrayList<IMMessageDefaultTable>() ;
        try {
            QueryBuilder qb =imMessageDefaultTableDao.queryBuilder();
            qb.where(IMMessageDefaultTableDao.Properties.Listid.lt(listId));
            qb.orderDesc(IMMessageDefaultTableDao.Properties.Listid);
            qb.limit(pageSize);
            dataList = qb.list();
        }catch (Exception e){

        }
        return dataList;
    }
    /**
     * 分页获取数据（正序）
     * @param listId  开始listid（大于）
     * @param pageSize
     * @return
     */
    public synchronized List<IMMessageDefaultTable> getImDefaultEntryListByListIdAsc(long listId, int pageSize){
        if(pageSize<=0){
            pageSize = 5;
        }
        List<IMMessageDefaultTable > dataList = null ;
        try {
            QueryBuilder qb =imMessageDefaultTableDao.queryBuilder();
            qb.where(IMMessageDefaultTableDao.Properties.Listid.gt(listId));
            qb.orderAsc(IMMessageDefaultTableDao.Properties.Listid);
            qb.limit(pageSize);
            dataList = qb.list();
        }catch (Exception e){

        }
        return dataList;
    }

    /**
     * 获取最新的数据集合(时间)(倒序)
     * @param pageSize
     * @return
     */
    public synchronized List<IMMessageDefaultTable> getImDefaultEntryListByCreateTimeDesc(int pageSize){
        if(pageSize<=0){
            pageSize = 5;
        }
        List<IMMessageDefaultTable > dataList = null ;
        try {
            QueryBuilder qb =imMessageDefaultTableDao.queryBuilder();
            qb.orderDesc(IMMessageDefaultTableDao.Properties.Create_time);
            qb.orderDesc(IMMessageDefaultTableDao.Properties.Listid);
            qb.limit(pageSize);
            dataList = qb.list();
        }catch (Exception e){

        }
        return dataList;
    }
    /**
     * 获取最新的数据集合(时间)(正序)
     * @param pageSize
     * @return
     */
    public synchronized List<IMMessageDefaultTable> getImDefaultEntryListByCreateTimeAsc(int pageSize){
        if(pageSize<=0){
            pageSize = 5;
        }
        List<IMMessageDefaultTable > dataList = null ;
        try {
            QueryBuilder qb =imMessageDefaultTableDao.queryBuilder();
            qb.orderAsc(IMMessageDefaultTableDao.Properties.Create_time);
            qb.orderAsc(IMMessageDefaultTableDao.Properties.Listid);
            qb.limit(pageSize);
            dataList = qb.list();
        }catch (Exception e){

        }
        return dataList;
    }
    /**
     * 分页获取数据（倒序）
     * @param  listId 开始listid（小于）
     * @param pageSize
     * @return
     */
    public synchronized List<IMMessageDefaultTable> getImDefaultEntryListByCreateTimeDesc(Long listId,String createTime, int pageSize){
        if(pageSize<=0){
            pageSize = 5;
        }
        List<IMMessageDefaultTable > dataList = new ArrayList<IMMessageDefaultTable>() ;
        try {
            QueryBuilder qb =imMessageDefaultTableDao.queryBuilder();
            qb.where(IMMessageDefaultTableDao.Properties.Create_time.le(createTime));
            qb.where(IMMessageDefaultTableDao.Properties.Listid.lt(listId));
            qb.orderDesc(IMMessageDefaultTableDao.Properties.Create_time);
            qb.limit(pageSize);
            dataList = qb.list();
        }catch (Exception e){

        }
        return dataList;
    }
    /**
     * 分页获取数据(时间)（正序）
     * @param listId  开始listid（大于）
     * @param pageSize
     * @return
     */
    public synchronized List<IMMessageDefaultTable> getImDefaultEntryListByCreateTimeAsc(Long listId,String createTime, int pageSize){
        if(pageSize<=0){
            pageSize = 5;
        }
        List<IMMessageDefaultTable > dataList = null ;
        try {
            QueryBuilder qb =imMessageDefaultTableDao.queryBuilder();
            qb.where(IMMessageDefaultTableDao.Properties.Create_time.ge(createTime));
            qb.where(IMMessageDefaultTableDao.Properties.Listid.gt(listId));
            qb.orderAsc(IMMessageDefaultTableDao.Properties.Create_time);
            qb.limit(pageSize);
            dataList = qb.list();
        }catch (Exception e){

        }
        return dataList;
    }



    /**
     *  获取某个entry
     * @param msgId
     * @return
     */
    public synchronized IMMessageDefaultTable getImDefaultEntryByMsgId(String msgId){
        IMMessageDefaultTable imMessageDefaultTable =null;
        try {
            QueryBuilder qb =imMessageDefaultTableDao.queryBuilder();
            qb.where(IMMessageDefaultTableDao.Properties.Msg_id.eq(msgId));
            qb.limit(1);
            List<IMMessageDefaultTable>  entrys = qb.list();
            if (entrys != null && entrys.size() > 0) {
                imMessageDefaultTable = entrys.get(0);
            }
        }catch (Exception e){

        }
        return imMessageDefaultTable;
    }
    /**
     *  获取某个entry
     * @param listId
     * @return
     */
    public synchronized IMMessageDefaultTable getImDefaultEntryByListId(Long listId){
        IMMessageDefaultTable imMessageDefaultTable =null;
        try {
            QueryBuilder qb =imMessageDefaultTableDao.queryBuilder();
            qb.where(IMMessageDefaultTableDao.Properties.Listid.eq(listId));
            qb.limit(1);
            List<IMMessageDefaultTable>  entrys  = qb.list();
            if (entrys != null && entrys.size() > 0) {
                imMessageDefaultTable = entrys.get(0);
            }
        }catch (Exception e){

        }
        return imMessageDefaultTable;
    }
    //==============================delete ========================

    /**
     * 删除指定的ImDefaultEntry
     * @param listId
     */
    public synchronized void delImDefaultEntryByListId(Long listId){
        imMessageDefaultTableDao.deleteByKey(listId);
    }

    /**
     * 删除全部数据
     */
    public synchronized void delImDefaultEntryAll(){
        imMessageDefaultTableDao.deleteAll();
    }


    //===================================update=========================================

    /**
     * 更新某条数据
     * @param msgId
     */
    public synchronized void updateImDefaultEntryByMsgId(String msgId){
        IMMessageDefaultTable upEntry = getImDefaultEntryByMsgId(msgId);
        if(upEntry!=null){
            upEntry.setIsRead(1);
            imMessageDefaultTableDao.update(upEntry);
        }
    }
    /**
     * 更新某条数据
     * @param listId
     */
    public synchronized void updateImDefaultEntryByListId(Long listId){
        IMMessageDefaultTable upEntry = getImDefaultEntryByListId(listId);
        if(upEntry!=null){
            upEntry.setIsRead(1);
            imMessageDefaultTableDao.update(upEntry);
        }
    }
    /**
     * 更新全部的未读消息为已读
     */
    public synchronized void updateImDefaultEntryRead(){
        QueryBuilder qb =imMessageDefaultTableDao.queryBuilder();
        qb.where(IMMessageDefaultTableDao.Properties.IsRead.eq(0));
        List<IMMessageDefaultTable> entrys= qb.list();
        List<IMMessageDefaultTable> updateEntrys= new ArrayList<IMMessageDefaultTable>();
        for (IMMessageDefaultTable entry:entrys) {
            entry.setIsRead(1);
            updateEntrys.add(entry);
        }
        if(updateEntrys!=null && !updateEntrys.isEmpty()) {
            imMessageDefaultTableDao.updateInTx(updateEntrys);
        }

    }
}
